package com.shanzmoo.platform.manage.api.web.merchant;

import com.shanzmoo.base.bean.PageRespBase;
import com.shanzmoo.base.bean.SHttpResponse;
import com.shanzmoo.base.util.JYFException;
import com.shanzmoo.db.module.merchant.domain.dto.MerchantInfoDto;
import com.shanzmoo.db.module.merchant.domain.dto.MerchantSettlementInfoDto;
import com.shanzmoo.db.module.merchant.domain.query.*;
import com.shanzmoo.db.module.merchant.domain.vo.*;
import com.shanzmoo.db.module.merchant.domain.vo.base.MerchantBaseInfoVo;
import com.shanzmoo.db.module.merchant.entity.MerchantInfoEntity;
import com.shanzmoo.platform.manage.api.manager.merchant.MerchantInfoManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 作者：zfj
 * @version 创建时间：2021年3月28日,0028
 * @classDesc 类描述
 */
@Slf4j
@Api(tags = "商户入驻")
@RestController
@RequestMapping("/merchantInfo")
@RequiredArgsConstructor
public class MerchantInfoController {

    // 入驻商户处理信息
    private final MerchantInfoManager merchantInfoManager;

    /**
     * 分页查询入驻商户信息
     *
     * @param query 入驻商户查询条件信息
     * @return
     */
    @ApiOperation(value = "分页查询入驻商户信息")
    @PostMapping("/selectMerchantInfos")
    public SHttpResponse<PageRespBase<MerchantSimpleInfoVo>> selectMerchantInfos(@RequestBody MerchantInfoQuery query) {
        return merchantInfoManager.selectMerchantInfos(query);
    }

    /**
     * 查询入驻商户信息
     *
     * @param query 入驻商户查询条件信息
     * @return
     */
    @ApiOperation(value = "查询入驻商户明细信息")
    @PostMapping("/selectMerchantInfo")
    public SHttpResponse<MerchantInfoDetailVo> selectMerchantInfo(@RequestBody MerchantInfoQuery query) {
        return merchantInfoManager.selectMerchantInfo(query);
    }

    /**
     * 更新入驻商户基本信息
     *
     * @param merchantManageBaseInfoVo 待修改的入驻商户信息
     * @return
     */
    @ApiOperation(value = "更新入驻商户基本信息")
    @PostMapping("/updateMerchantInfo")
    public SHttpResponse<Integer> updateMerchantInfo(@RequestBody MerchantManageBaseInfoVo merchantManageBaseInfoVo) {
        try {
            return merchantInfoManager.updateMerchantInfo(merchantManageBaseInfoVo);
        } catch (JYFException e){
            log.error("更新入驻商户基本信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100004, e.getMessage());
        } catch (Exception e) {
            log.error("更新入驻商户基本信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100003, "更新入驻商户基本信息异常");
        }
    }

    /**
     * 修改证照信息
     *
     * @return
     */
    @ApiOperation(value = "修改证照信息")
    @PostMapping("/updateMerchantManageLicenceInfo")
    public SHttpResponse<Integer> updateMerchantManageLicenceInfo(@RequestBody MerchantManageLicenceInfoVo merchantManageLicenceInfoVo) {
        try {
            return merchantInfoManager.updateMerchantManageLicenceInfo(merchantManageLicenceInfoVo);
        } catch (JYFException e){
            log.error("修改证照信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100004, e.getMessage());
        } catch (Exception e) {
            log.error("修改证照信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100003, "修改证照信息异常");
        }
    }

    /**
     * 分页查询审核入驻信息
     *
     * @param query 审核入驻信息查询条件
     * @return
     */
    @ApiOperation(value = "分页查询审核入驻信息")
    @PostMapping("/selectMerchantOperLog")
    @Deprecated
    public SHttpResponse<PageRespBase<MerchantOperLogVo>> selectMerchantOperLog(@RequestBody MerchantInfoQuery query) {
        return null;
    }

    /**
     * 获取行业类别信息
     *
     * @return
     */
    @ApiOperation(value = "获取行业类别信息")
    @PostMapping("/selectBusinessInfo")
    public SHttpResponse<List<BusinessVo>> selectBusinessInfo(@RequestBody BusinessQuery query) {
        return merchantInfoManager.selectBusinessInfo(query);
    }

    /**
     * 获取地区信息
     *
     * @return
     */
    @ApiOperation(value = "获取地区信息")
    @PostMapping("/selectAreaInfo")
    public SHttpResponse<List<AreaVo>> selectAreaInfo(@RequestBody AreaQuery query) {
        return merchantInfoManager.selectAreaInfo(query);
    }

    /**
     * 通过银卡编码获取支行信息等
     *
     * @return
     */
    @ApiOperation(value = "通过银卡编码获取支行信息等")
    @PostMapping("/selectBank")
    public SHttpResponse<List<BankVo>> selectBank(@RequestBody BankQuery query) {
        return merchantInfoManager.selectBank(query);
    }

    /**
     * 查询变更单入驻商户基本信息
     *
     * @param query 查询条件
     * @return
     */
    @ApiOperation(value = "查询变更单入驻商户基本信息")
    @PostMapping("/selectMerchantBaseInfo")
    public SHttpResponse<MerchantManageBaseInfosVo> selectMerchantBaseInfo(@RequestBody BaseQuery query) {
        return merchantInfoManager.selectMerchantBaseInfo(query);
    }

    /**
     * 变更单更新入驻商户基本信息
     *
     * @param merchantBaseInfo 待修改的入驻商户信息
     * @return
     */
    @ApiOperation(value = "变更单更新入驻商户基本信息")
    @PostMapping("/updateMerchantBaseInfo")
    public SHttpResponse<Integer> updateMerchantBaseInfo(@RequestBody MerchantBaseInfoVo merchantBaseInfo) {
        try {
            return merchantInfoManager.updateMerchantBaseInfo(merchantBaseInfo);
        } catch (JYFException e){
            log.error("更新入驻商户基本信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100004, e.getMessage());
        } catch (Exception e) {
            log.error("更新入驻商户基本信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100003, "更新入驻商户基本信息异常");
        }
    }

    /**
     * 查询变更单结算信息
     *
     * @return
     */
    @ApiOperation(value = "查询变更单结算信息")
    @PostMapping("/selectMerchantSettlementInfo")
    public SHttpResponse<MerchantSettlementInfosVo> selectMerchantSettlementInfo(@RequestBody BaseQuery query) {
       return merchantInfoManager.selectMerchantSettlementInfo(query);
    }

    /**
     * 修改变更单结算信息
     *
     * @return
     */
    @ApiOperation(value = "修改变更单结算信息")
    @PostMapping("/updateMerchantSettlementInfo")
    public SHttpResponse<Boolean> updateMerchantSettlementInfo(@RequestBody MerchantSettlementInfoDto settlementInfo) {
        try {
            return merchantInfoManager.updateMerchantSettlementInfo(settlementInfo);
        } catch (JYFException e){
            log.error("修改变更单结算信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100004, e.getMessage());
        } catch (Exception e) {
            log.error("修改变更单结算信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100003, "修改变更单结算信息异常");
        }
    }

    /**
     * 获取变更单列表信息
     *
     * @param query 获取变更单列表信息
     * @return
     */
    @ApiOperation(value = "分页获取变更单列表信息")
    @PostMapping("/selectMerchantChangeInfos")
    public SHttpResponse<PageRespBase<MerchantChangeInfoVo>> selectMerchantChangeInfos(@RequestBody MerchantChangeInfoQuery query) {
        return merchantInfoManager.selectMerchantChangeInfos(query);
    }


    /**
     * 审核入驻商户信息
     *
     * @param query 待审核的入驻商户信息
     * @return
     */
    @ApiOperation(value = "审核入驻商户信息")
    @PostMapping("/verifyMerchantInfo")
    public SHttpResponse<Integer> verifyMerchantInfo(@RequestBody MerchantInfoVerifyQuery query) {
        try {
            return merchantInfoManager.verifyMerchantInfo(query);
        } catch (JYFException e){
            log.error("审核入驻商户信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100004, e.getMessage());
        } catch (Exception e) {
            log.error("审核入驻商户信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100003, "审核入驻商户信息失败");
        }
    }

    /**
     * 审核变更单信息
     *
     * @param query 待审核的变更单信息
     * @return
     */
    @ApiOperation(value = "审核变更单信息")
    @PostMapping("/verifyMerchantChangeInfo")
    public SHttpResponse<Integer> verifyMerchantChangeInfo(@RequestBody MerchantInfoVerifyQuery query) {
        try {
            return merchantInfoManager.verifyMerchantChangeInfo(query);
        } catch (JYFException e){
            log.error("审核变更单信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100004, e.getMessage());
        } catch (Exception e) {
            log.error("审核变更单信息异常，异常信息为：{}", e);
            return SHttpResponse.fail(100003, "审核变更单信息失败");
        }
    }
}
